package com.kun.companion.core.context.annotation;

import com.kun.companion.core.context.impl.BeanContext;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 依赖注入注解
 * <p>
 * 用于向非Bean容器管理的对象（如Controller、工具类等）注入Bean实例。
 * 通过反射机制在运行时自动注入标记字段，需配合框架的依赖注入处理器使用。
 * </p>
 *
 * <p>典型使用场景：</p>
 * <pre>{@code
 * public class UserController extend AbstractController {
 *     @InjectBean
 *     private UserService userService; // 自动注入UserService实例
 * }
 * }</pre>
 *
 * <p>注解特性：</p>
 * <ul>
 *   <li>支持字段级别的依赖注入</li>
 *   <li>运行时生效（RetentionPolicy.RUNTIME）</li>
 *   <li>不限制字段访问修饰符（可注入private字段）</li>
 *   <li>要求目标Bean已在容器中注册</li>
 * </ul>
 *
 * 注意：不加载static和final修饰的属性
 *
 * @author gzc
 * @see BeanContext Bean容器实现
 * @since 2025/2/3
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectBean {
}